﻿using System;
using System.Threading;

namespace 线程同步
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            BookShop book = new BookShop();
            //创建两个线程同时访问Sale方法
            Thread t1 = new Thread(new ThreadStart(book.Sale));//因为使用的同一个引用，所以书店库存量始终是一个地址的引用
            Thread t2 = new Thread(new ThreadStart(book.Sale));
            //启动线程
            t1.Start();
            t2.Start();
            Console.ReadKey();
        }

        private class BookShop
        {
            private int num = 1;//库存量
 
            public void Sale()
            {
                // 使用lock关键字解决线程同步问题。锁住当前对象
                lock (this)
                {
                    int tmp = num;
                    if (tmp > 0)//判断是否有书，如果有就可以卖
                    {
                        Thread.Sleep(1000);
                        num -= 1;
                        Console.WriteLine("售出一本图书，还剩余{0}本", num);
                    }
                    else
                    {
                        Console.WriteLine("没有了");
                    }
                }
            }
        }
    }
}